package com.etop.rediscache;

import java.io.Serializable;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

public class RedisUtil {
   private Logger logger=Logger.getLogger(RedisUtil.class);
   @Resource
   private RedisTemplate<Serializable,Object> redisTemplate;
   /**
    * 批量删除对应的value
    * @param pattern 
    */
   public void removePattern(final String pattern){
	   Set<Serializable> keys=redisTemplate.keys(pattern);
	   redisTemplate.delete(keys);
   }
   
   /**
    * 删除对应的value
    * 
    * @param key
    */
   public void remove(final String key){
	   if(exists(key)){
		   redisTemplate.delete(key);
	   }
   }
   
   /**
    * 判断缓存中是否有对应的value
    * @param key 
    * @return boolean
    */
   public boolean exists(final String key){
	   return redisTemplate.hasKey(key);
   }
   
   /**
    * 读取缓存
    * @param key 
    * @return
    */
   public Object get(final String key){
	   Object result=null;
	   ValueOperations<Serializable,Object> operations=redisTemplate.opsForValue();
	   result=operations.get(key);
	   return result;
   }
   /**
    * 写入缓存
    * @param key
    * @return
    */
   public boolean set(final String key,Object value){
	   boolean result=false;
	   try{
	   ValueOperations<Serializable,Object> operations=redisTemplate.opsForValue();
	   operations.set(key, value);
	   result=true;
	   }catch(Exception e){
		   e.printStackTrace();
	   }
	   return result;
   }
   
   /**
    * 写入缓存
    * @param
    * @return
    */
   public boolean set(final String key,Object value,Long expireTime){
	   boolean result=false;
	   try{
		   ValueOperations<Serializable,Object> operations=redisTemplate.opsForValue();
		   operations.set(key, value);
		   redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
		   result=true;
	   }catch(Exception e){
		   e.printStackTrace();
	   }
	   return result;
   }

public RedisTemplate<Serializable, Object> getRedisTemplate() {
	return redisTemplate;
}

public void setRedisTemplate(RedisTemplate<Serializable, Object> redisTemplate) {
	this.redisTemplate = redisTemplate;
}
  
   
}
